package com.cotasul.tela;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.cotasul.bean.TipoBean;
import com.cotasul.bean.UsuarioBean;
import com.cotasul.negocio.TipoServico;
import com.cotasul.negocio.interfaces.IServicoGenerico;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;

@ManagedBean
@ViewScoped
public class TipoTela extends TelaAbstrata {

	@ManagedProperty(value = "#{usuario}")
	private UsuarioBean usuario;

	private TipoServico<TipoBean> tipoServico;

	private TipoBean tipo;

	private List<TipoBean> tipos;

	private List<TipoBean> tiposFiltrados;

	public TipoTela() {
		try {
			tipo = new TipoBean();
			tipoServico = new TipoServico<TipoBean>();
			tipos = tipoServico.buscaTipos();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String adicionaTipo() {
		FacesMessage msg = null;
		try {
			tipo.setCodigo(tipoServico.salvar(tipo).get(""));
			tipo = new TipoBean();
			tipos = tipoServico.buscaTipos();
		} catch (MySQLIntegrityConstraintViolationException e) {
			msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, this
					.getServico().getValor("msg_header_erro"), this
					.getServico().getValor("msg_erro_constraint_violation"));
			FacesContext.getCurrentInstance().addMessage(null, msg);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	public void buscaTipoFiltro(String descricao) {
		try {
			tipos = this.tipoServico.buscaTipoFiltro(descricao);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String excluirTipo(Object o) {
		try {
			tipoServico.excluir((TipoBean) o);
			tipos = tipoServico.buscaTipos();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@SuppressWarnings("rawtypes")
	@Override
	protected IServicoGenerico getServico() {
		return this.tipoServico;
	}

	public TipoServico<TipoBean> getTipoServico() {
		return tipoServico;
	}

	public TipoBean getTipo() {
		return tipo;
	}

	public void setTipo(TipoBean tipo) {
		this.tipo = tipo;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}

	public List<TipoBean> getTipos() {
		return tipos;
	}

	public void setTipos(List<TipoBean> tipos) {
		this.tipos = tipos;
	}

	public void setTiposFiltrados(List<TipoBean> tiposFiltrados) {
		this.tiposFiltrados = tiposFiltrados;
	}

	public List<TipoBean> getTiposFiltrados() {
		return tiposFiltrados;
	}
}
